home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / oasis / oasisegs.lha / egs / queena.c < prev    next >
C/C++ Source or Header  |  1992-04-23  |  1KB  |  55 lines

  1. #define MAX             800
  2. #define N               10
  3. int                     size;
  4. int                     count = 0;
  5. int                     all[MAX][N];
  6. int                     q[N];
  7.  
  8. void    queen(n)
  9. int     n;
  10. {
  11.         int     i, m;
  12.  
  13.         if (n == size) {
  14.             for (i = 0; i < size; i++)
  15.                 all[count][i] = q[i];
  16.             count++;
  17.         }
  18.         else for (m = 0; m < size; m++)
  19.             if (safe(m,n)) {
  20.                 q[n] = m;
  21.                 queen(n+1);
  22.             }
  23. }
  24.  
  25. int     safe(m,n)
  26. int     m, n;
  27. {
  28.         int     i;
  29.  
  30.         for (i = 1; i <= n; i++) {
  31.             int x = q[n-i];
  32.             if (m == x || m == x+i || m == x-i)
  33.                 return 0;
  34.         }
  35.         return -1;
  36. }
  37.  
  38. void    main(argc, argv)
  39. int     argc;
  40. char   *argv[];
  41. {
  42.         int     i, k;
  43.  
  44.         size = atoi(argv[1]);
  45.         queen(0);
  46.         printf("count = %d\n", count);
  47. /*
  48.         for (k = 0; k < count; k++) {
  49.             for (i = 0; i < size; i++)
  50.                 printf("%4d", all[k][i]);
  51.             putchar('\n');
  52.         }
  53. */
  54. }
  55.